1.Una tabla DT con las columnas Delito, Fecha, Víctima, Edad,
Género, Provincia y Cantón.
- Los encabezados de las columnas en la tabla deben estar
correctamente escritos (ej. con tildes), pero no deben alterarse los
nombres de las columnas del conjunto de datos. Sugerencia: utilice el
argumento colnames de la función DT::datatable().
- Los controles de la tabla deben estar en español.
## Warning in instance$preRenderHook(instance): It seems your data is too big
## for client-side DataTables. You may consider server-side processing: https://
## rstudio.github.io/DT/server.html
2.Un gráfico de barras simples, generado con ggplot2 y traducido a
plotly con ggplotly(), que muestre la cantidad de delitos por tipo de
delito (una barra por tipo de delito: asalto, homicidio, hurto,
etc).
-Las barras del gráfico deben estar ordenadas por longitud, de la
más larga a la más corta (ya sea de izquierda a derecha o de arriba a
abajo).
-El gráfico debe tener título, etiqueta para el eje X y etiqueta
para el eje Y.
-Todo el contenido del gráfico debe ser legible.
-Los controles del gráfico deben estar en español.
3. Un gráfico de barras simples, generado con ggplot2 y traducido a
plotly con ggplotly(), que muestre la cantidad de delitos por víctima
(una barra por víctima: edificación, persona, vivienda, etc.).
- Las barras del gráfico deben estar ordenadas por longitud, de la
más larga a la más corta (ya sea de izquierda a derecha o de arriba a
abajo).
- El gráfico debe tener título, etiqueta para el eje X y etiqueta
para el eje Y.
- Todo el contenido del gráfico debe ser legible.
- Los controles del gráfico deben estar en español.
4. Un gráfico de barras simples, generado con ggplot2 y traducido a
plotly con ggplotly(), que muestre la cantidad de delitos por mes del
año (una barra por cada uno de los meses del año).
-Las barras del gráfico deben estar ordenadas por número de mes (1,
2, …) o nombre de mes (Enero, Febrero, …), pero de acuerdo con el orden
de los meses en el calendario.
-El gráfico debe tener título, etiqueta para el eje X y etiqueta
para el eje Y.
-Todo el contenido del gráfico debe ser legible.
-Los controles de la tabla deben estar en español.
5. Un gráfico de barras apiladas, generado con ggplot2 y traducido a
plotly con ggplotly(), que muestre una barra por cada tipo de delito
(asalto, homicidio, hurto, etc). Cada barra debe mostrar la proporción
(no la cantidad) de delitos por género (mujer, hombre,
desconocido).
- El gráfico debe tener título, etiqueta para el eje X y etiqueta
para el eje Y.
- Todo el contenido del gráfico debe ser legible.
Datosxgenero <-
Datos_Policiales %>%
group_by(Delito) %>%
count(Genero)
Datosxgenero %>%
group_by(Delito) %>%
summarise( n1=n(), porcentaje = round(n1/n*100, digits = 1))
## `summarise()` has grouped output by 'Delito'. You can override using the
## `.groups` argument.
## # A tibble: 18 × 3
## # Groups: Delito [6]
## Delito n1 porcentaje
## <chr> <int> <dbl>
## 1 ASALTO 3 0.2
## 2 ASALTO 3 0.1
## 3 ASALTO 3 0.1
## 4 HOMICIDIO 3 3.2
## 5 HOMICIDIO 3 0.7
## 6 HOMICIDIO 3 8.1
## 7 HURTO 3 0.2
## 8 HURTO 3 0.1
## 9 HURTO 3 0.1
## 10 ROBO 3 0.1
## 11 ROBO 3 0.1
## 12 ROBO 3 0.1
## 13 ROBO DE VEHICULO 3 0.8
## 14 ROBO DE VEHICULO 3 0.1
## 15 ROBO DE VEHICULO 3 0.6
## 16 TACHA DE VEHICULO 3 0.8
## 17 TACHA DE VEHICULO 3 0.2
## 18 TACHA DE VEHICULO 3 0.4
6.Un mapa de coropletas desarrollado con leaflet que muestre la
cantidad de delitos en los cantones de Costa Rica (vea el ejemplo
desarrollado en clase). El mapa debe tener:
-Una capa base (ej. OpenStreetMap).
-Una capa de polígonos de cantones cuyos colores reflejen la
cantidad de delitos en cada cantón, de acuerdo con un esquema de colores
adecuado.
-Un control para activar y desactivar las capas.
-Una leyenda que muestre los rangos de valores asociados a los
colores.
# Normalización de los nombres de cantones
# En el data frame de cantones
cantones <-
cantones %>%
mutate(canton_normalizado = tolower(stri_trans_general(canton, id = "Latin-ASCII")))
# En el data frame de delitos
Datos_Policiales <-
Datos_Policiales %>%
mutate(canton_normalizado = tolower(stri_trans_general(Canton, id = "Latin-ASCII")))
Datos_Policiales %>%
left_join(
dplyr::select(st_drop_geometry(cantones),
canton_normalizado, cod_canton),
by = "canton_normalizado",
copy = FALSE,
keep = FALSE
) %>%
filter(is.na(cod_canton) & canton_normalizado != "desconocido") %>% # los cod_canton = NA son los que no están en el data frame de cantones
distinct(canton_normalizado) # se despliegan solo los nombres de cantones diferentes
## # A tibble: 2 × 1
## canton_normalizado
## <chr>
## 1 leon cortes
## 2 vasquez de coronado
Datos_Policiales <-
Datos_Policiales %>%
mutate(Canton = if_else(Canton == "LEON CORTES", "LEON CORTES CASTRO", Canton)) %>%
mutate(Canton = if_else(Canton == "VASQUEZ DE CORONADO", "VAZQUEZ DE CORONADO", Canton))
# Unión del código de cantón a delitos
Datos_Policiales <-
Datos_Policiales%>%
left_join(
dplyr::select(
st_drop_geometry(cantones),
cod_canton,
canton_normalizado
),
by = "canton_normalizado",
copy = FALSE,
keep = FALSE
)
# Conteo de registros por código de cantón
delitos_x_canton <-
Datos_Policiales %>%
count(cod_canton, name = "delitos")
# Unión de cantidad de delitos por cantón a cantones
cantones_delitos <-
cantones %>%
left_join(
delitos_x_canton,
by = "cod_canton",
copy = FALSE,
keep = FALSE
)
# Visualización en formato de tabla
cantones_delitos %>%
st_drop_geometry() %>%
select(canton, delitos) %>%
arrange(desc(delitos)) %>%
datatable(options = list(
pageLength = 10,
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
))
colores_cantones_delitos <-
colorNumeric(palette = "Reds",
domain = cantones_delitos$delitos,
na.color = "transparent")
plot(
cantones_delitos["delitos"],
extent = st_bbox(c(xmin = -86.0, xmax = -82.3, ymin = 8.0, ymax = 11.3)),
col = colores_cantones_delitos(cantones_delitos$delitos),
main = "Cantidad de delitos ocurridos en 2021 en cantones de Costa Rica",
axes = TRUE,
graticule = TRUE
)

leaflet() %>%
setView(# centro y nivel inicial de acercamiento
lng = -84.19452,
lat = 9.572735,
zoom = 7) %>%
addTiles(group = "OpenStreetMap") %>% # capa base
addPolygons(#añade mapa
data = cantones_delitos,
fillColor = ~ colores_cantones_delitos(cantones_delitos$delitos),
fillOpacity = 0.6,
color = "black",
stroke = TRUE,
weight = 1.0,
popup = paste(
paste(
"<strong>Cantón:</strong>",
cantones_delitos$canton
),
paste(
"<strong>Delitos:</strong>",
cantones_delitos$delitos
),
sep = '<br/>'
),
group = "Delitos en cantones"
)%>%
addLayersControl(
# control de capas
baseGroups = c("OpenStreetMap"),
overlayGroups = c("Delitos en cantones")
) %>%
addResetMapButton() %>%
addMouseCoordinates() %>%
addScaleBar(position = "bottomright", options = scaleBarOptions(imperial = FALSE)) %>%
addMiniMap(position = "bottomright") %>%
addLegend(
# leyenda
position = "bottomleft",
pal = colores_cantones_delitos,
values = cantones_delitos$delitos,
group = "Delitos",
title = "Cantidad de delitos"
)